﻿Imports DAL

Public Class buCustomers

   
    ''' <summary>
    ''' Truy vấn thông tin khách hàng dựa vào ID
    ''' </summary>
    ''' <param name="customerId">ID khách hàng</param>
    Public Function RetrieveCustomerById(ByVal customerId As Integer) As Customer

        'FUNC: Truy vấn thông tin MỘT customer dựa vào Customer Id - Sử dụng LINQ
        Using dbEntities As New PrestozEntities

            Return (From c In dbEntities.Customers
                    Where c.CustomerId = customerId
                    Select c).FirstOrDefault()
        End Using
        
    End Function


    ''' <summary>
    ''' Cập nhật record Customer
    ''' </summary>
    ''' <param name="customer">Dữ liệu để cập nhật</param>
    Public Function UpdateCustomerById(ByVal customer As Customer) As Boolean

        'FUNC: Cập nhật thông tin MỘT customer dựa vào CustomerId - Sử dụng LINQ kết hợp DbContext
        Using dbEntities As New PrestozEntities
            Dim customerId As Integer = customer.CustomerId
            'Lấy dữ liệu customer tương ứng với ID chỉ định
            Dim retrieveCustomer As New Customer

            retrieveCustomer = dbEntities.Customers.FirstOrDefault(Function(c) c.CustomerId = customerId)

            Try
                'Cập nhật các thông tin
                retrieveCustomer.Type = customer.Type
                retrieveCustomer.ZType = customer.ZType
                retrieveCustomer.CustomerNameVI = customer.CustomerNameVI
                retrieveCustomer.CustomerNameEN = customer.CustomerNameEN
                retrieveCustomer.IndustrialField = customer.IndustrialField
                retrieveCustomer.Note = customer.Note

                retrieveCustomer.LastUpdate = DateTime.Now

                dbEntities.SaveChanges()

                Return True

            Catch ex As Exception
                MsgBox(ex.Message)
                dbEntities.ClearChanges()

                Return False
            End Try
        End Using

    End Function


    ''' <summary>
    ''' Truy vấn danh sách ID khách hàng
    ''' </summary>
    Public Function RetrieveListOfCustomerIds() As List(Of Customer)

        'FUNC: Truy vấn danh sách CustomerIDs - Sử dụng kỹ thuật READ SUBSET COLUMNS (One Column)
        Using dbEntities As New PrestozEntities
            Dim customerIds As List(Of Customer) = (From c In dbEntities.Customers
                                                Select New Customer With {
                                                    .CustomerId = c.CustomerId}).ToList()

            Return customerIds
        End Using

    End Function


    ''' <summary>
    ''' Thêm mới một record Customer
    ''' </summary>
    ''' <param name="customer">Dữ liệu khách hàng mới</param>
    Public Function InsertNewCustomer(ByVal customer As Customer) As Boolean

        'FUNC: Thêm mới MỘT record customer - Sử dụng DbContext
        Using dbEntities As New PrestozEntities

            Dim retrieveCustomer As New Customer

            'Ghi nhận các thông tin
            retrieveCustomer.Type = customer.Type
            retrieveCustomer.ZType = customer.ZType
            retrieveCustomer.CustomerNameVI = customer.CustomerNameVI
            retrieveCustomer.CustomerNameEN = customer.CustomerNameEN
            retrieveCustomer.IndustrialField = customer.IndustrialField
            retrieveCustomer.Note = customer.Note

            retrieveCustomer.CreatedDate = DateTime.Now
            retrieveCustomer.LastUpdate = DateTime.Now

            Try

                dbEntities.Add(retrieveCustomer)
                dbEntities.SaveChanges()

                Return True

            Catch ex As Exception
                MsgBox(ex.Message)
                dbEntities.ClearChanges()

                Return False
            End Try
        End Using

    End Function


    ''' <summary>
    ''' Xóa record khách hàng dựa vào ID
    ''' </summary>
    ''' <param name="customerId">ID khách hàng</param>
    Public Function DeleteCustomerById(ByVal customerId As Integer) As Boolean

        'FUNC: Truy vấn thông tin MỘT customer dựa vào Customer Id - Sử dụng LINQ
        Using dbEntities As New PrestozEntities

            Try
                dbEntities.Delete(From c In dbEntities.Customers
                              Where c.CustomerId = customerId
                              Select c)
                dbEntities.SaveChanges()

                Return True

            Catch ex As Exception

                MsgBox(ex.Message)
                dbEntities.ClearChanges()

                Return False

            End Try
        End Using

    End Function


    ''' <summary>
    ''' Truy vấn danh sách ID khách hàng cùng tên tiếng Việt
    ''' </summary>
    Public Function RetrieveListOfCustomerIdsAndCompanyNameVIs() As List(Of Customer)

        'FUNC: Truy vấn danh sách CustomerIDs - Sử dụng kỹ thuật READ SUBSET COLUMNS (Two Columns)
        Using dbEntities As New PrestozEntities
            
            Return (From c In dbEntities.Customers
                                                Select New Customer With {
                                                    .CustomerId = c.CustomerId,
                                                    .CustomerNameVI = c.CustomerNameVI}).ToList()
        End Using

    End Function

End Class
